<!DOCTYPE html>
<html>

<head>
  <title>Quarkus 0.24.0 released - Vert.x everywhere</title>
  <script id="adobe_dtm" src="https://www.redhat.com/dtm.js" type="text/javascript"></script>
  <script src="/assets/javascript/highlight.pack.js" type="text/javascript"></script>
  <META HTTP-EQUIV='Content-Security-Policy' CONTENT="default-src 'none'; script-src 'self' 'unsafe-eval' 'sha256-ANpuoVzuSex6VhqpYgsG25OHWVA1I+F6aGU04LoI+5s=' 'sha256-ipy9P/3rZZW06mTLAR0EnXvxSNcnfSDPLDuh3kzbB1w=' js.bizographics.com https://www.redhat.com assets.adobedtm.com jsonip.com https://ajax.googleapis.com https://www.googletagmanager.com https://www.google-analytics.com https://use.fontawesome.com; style-src 'self' https://fonts.googleapis.com https://use.fontawesome.com; img-src 'self' *; media-src 'self' ; frame-src https://www.googletagmanager.com https://www.youtube.com; frame-ancestors 'none'; base-uri 'none'; object-src 'none'; form-action 'none'; font-src 'self' https://use.fontawesome.com https://fonts.gstatic.com;">
  <META HTTP-EQUIV='X-Frame-Options' CONTENT="DENY">
  <META HTTP-EQUIV='X-XSS-Protection' CONTENT="1; mode=block">
  <META HTTP-EQUIV='X-Content-Type-Options' CONTENT="nosniff">
  <meta charset="utf-8">
  <meta name="viewport" content="width=device-width, initial-scale=1">
  <meta name="description" content="Quarkus: Supersonic Subatomic Java">
  <meta name="twitter:card" content="summary_large_image">
  <meta name="twitter:site" content="@QuarkusIO"> 
  <meta name="twitter:creator" content="@QuarkusIO">
  <meta property="og:url" content="https://quarkus.io/blog/quarkus-0-24.0-released/" />
  <meta property="og:title" content="Quarkus 0.24.0 released - Vert.x everywhere" />
  <meta property="og:description" content="Quarkus: Supersonic Subatomic Java" />
  <meta property="og:image" content="/assets/images/quarkus_card.png" />
  <link rel="canonical" href="https://quarkus.io/blog/quarkus-0-24.0-released/">
  <link rel="shortcut icon" type="image/png" href="/favicon.ico" >
  <link rel="stylesheet" href="https://quarkus.io/guides/stylesheet/config.css" />
  <link rel="stylesheet" href="/assets/css/main.css" />
  <link rel="stylesheet" href="https://use.fontawesome.com/releases/v5.1.0/css/all.css" integrity="sha384-lKuwvrZot6UHsBSfcMvOkWwlCMgc0TaWr+30HWe3a4ltaBwTZhyTEggF5tJv8tbt" crossorigin="anonymous">
  <link rel="alternate" type="application/rss+xml"  href="https://quarkus.io/feed.xml" title="Quarkus">
  <script src="https://quarkus.io/assets/javascript/goan.js" type="text/javascript"></script>
  <script src="https://quarkus.io/assets/javascript/hl.js" type="text/javascript"></script>
</head>

<body class="post">
  <!-- Google Tag Manager (noscript) -->
  <noscript><iframe src="https://www.googletagmanager.com/ns.html?id=GTM-NJWS5L"
  height="0" width="0" style="display:none;visibility:hidden"></iframe></noscript>
  <!-- End Google Tag Manager (noscript) -->

  <div class="nav-wrapper">
  <div class="grid-wrapper">
    <div class="width-12-12">
      <input type="checkbox" id="checkbox" />
      <nav id="main-nav" class="main-nav">
  <div class="container">
    <div class="logo-wrapper">
      
        <a href="/"><img src="/assets/images/quarkus_logo_horizontal_rgb_600px_reverse.png" class="project-logo" title="Quarkus"></a>
      
    </div>
    <label class="nav-toggle" for="checkbox">
      <i class="fa fa-bars"></i>
    </label>
    <div id="menu" class="menu">
      <span>
        <a href="/get-started/" class="">Get Started</a>
      </span>
      <span>
        <a href="/guides/" class="">Guides</a>
      </span>
      <span>
        <a href="/community/" class="">Community</a>
      </span>
      <span>
        <a href="/support/" class="">Support</a>
      </span>
      <span>
        <a href="/blog/" class="active">Blog</a>
      </span>
      <span>
        <a href="https://code.quarkus.io" class="button-cta secondary white">Start Coding</a>
      </span>
    </div>
  </div>
      </nav>
    </div>
  </div>
</div>

  <div class="content">
    <div class="post-page grid-wrapper">
  <div class="width-8-12 width-12-12-m doc-content">
    <div class="grid-wrapper">
      <div class="width-12-12">
        <p>
          <a href="/blog"><i class="fas fa-angle-left"></i> Back to all posts</a>
        </p>
      </div>
      <div class="width-12-12">
        <div class="post-date">
          October 12, 2019 
          
            <span class="tags"><a href="/blog/tag/release">#release</a></span>
          
        </div>
        <h1 class="post-title">Quarkus 0.24.0 released - Vert.x everywhere</h1>
        <div class="grid-wrapper">
          <div class="width-8-12 width-12-12-m byline-wrapper">
            
            
              <img class="headshot" src="https://www.gravatar.com/avatar/ec96387a1a8295b6fd6dffb68f80c352">
            
            <p class="byline">By Guillaume Smet</p>
          </div>
          <div class="width-12-12">
              <div class="paragraph">
<p>Due to <a href="https://status.maven.org/">serious outages</a> of the OSS Sontype (our gate to Maven Central), we were unable to release as planned but&#8230;&#8203; here we are, 0.24.0 is out!</p>
</div>
<div class="paragraph">
<p>This one is built on top of the shoulders of 0.23 to move more things to our new Vert.x based HTTP layer. It also introduces big changes to our security layer.</p>
</div>
<div class="sect1">
<h2 id="whats-new"><a class="anchor" href="#whats-new"></a>What&#8217;s new?</h2>
<div class="sectionbody">
<div class="sect2">
<h3 id="servlet-no-longer-required-for-jax-rs"><a class="anchor" href="#servlet-no-longer-required-for-jax-rs"></a>Servlet no longer required for JAX-RS</h3>
<div class="paragraph">
<p>This means that if your application depends on <code>quarkus-resteasy</code> and not <code>quarkus-undertow</code> then Servlet will not be present, and RESTEasy will run directly on a Vert.x backend.</p>
</div>
<div class="paragraph">
<p>For most applications this should be largely transparent, however if you wish to use Servlet filters or other Servlet functionality then you can simply add a dependency on <code>quarkus-undertow</code>. If Undertow is present, RESTEasy will detect this and will fall back to running as a Servlet.</p>
</div>
<div class="paragraph">
<p>Please reach out to us if you think a missing feature should be supported out of the box by RESTEasy + Vert.x because we want as many users as possible on the new Vert.x layer.</p>
</div>
<div class="paragraph">
<p>For instance, we introduced <code>quarkus.http.root-path</code> as the counterpart of <code>quarkus.servlet.context-path</code>.</p>
</div>
</div>
<div class="sect2">
<h3 id="new-reactive-security-layer"><a class="anchor" href="#new-reactive-security-layer"></a>New reactive security layer</h3>
<div class="paragraph">
<p>Previously Security was tied to Undertow and only applied to Servlet deployments, while also being 100% blocking. This change brings in a new security layer that is not tied to any specific implementation, and also allows for reactive security operations to integrate with Vert.x. It is also no longer tied to Elytron, however Elytron still remains an option.</p>
</div>
<div class="paragraph">
<p>This is still a work in progress and there is a lot more work to come over the following few weeks, however the main changes today are:</p>
</div>
<div class="ulist">
<ul>
<li>
<p>HTTP Authentication is now handled at the Vert.x layer. Previously this was configured in the Elytron extensions, this configuration has been removed</p>
</li>
<li>
<p>The <code>elytron-security</code> extension has been broken up into base functionality and <a href="https://quarkus.io/guides/security-properties">a new <code>elytron-security-properties-file</code> extension</a> that contains support for simple properties file based config.</p>
</li>
<li>
<p>There is <a href="https://quarkus.io/guides/security-jdbc">a new <code>elytron-security-jdbc</code> extension</a> that allows for users to be loaded from a database. This extension is still alpha and its configuration will likely be simplified for the next release.</p>
</li>
<li>
<p>HTTP basic auth is now enabled by the <code>quarkus.http-auth.basic=true</code> property. To use this, you will need to have the <code>elytron-security-properties-file</code> or the (still alpha) <code>elytron-security-jdbc</code> extension in your application.</p>
</li>
<li>
<p>HTTP form auth is missing in this release, it will be replaced sometime next week. Previously this relied on an in-memory HTTP session, so did not work in cloud environments. The new implementation will use encrypted cookies to replace the in memory session allowing it to be used in clustered environments.</p>
</li>
</ul>
</div>
</div>
<div class="sect2">
<h3 id="keycloak-extension-replaced-by-an-oidc-extension-openid-connect"><a class="anchor" href="#keycloak-extension-replaced-by-an-oidc-extension-openid-connect"></a>Keycloak extension replaced by an OIDC extension (OpenID Connect)</h3>
<div class="paragraph">
<p>The original Keycloak-specific <code>quarkus-keycloak</code> adapter has been replaced with a generic OpenID Connect (OIDC) <code>quarkus-oidc</code> adapter which will provide a comprehensive, generic and reactive support for the most important OIDC flows and be able to verify the tokens from all the certified OIDC providers including Keycloak. Tokens from the other OIDC and OAuth2 providers implementing a <a href="https://tools.ietf.org/html/rfc7662">token introspection</a> endpoint will also be recognized.</p>
</div>
<div class="paragraph">
<p>You can find all the information relative to this new extension in our new <a href="https://quarkus.io/guides/security-openid-connect">OIDC guide</a> but here is a summary of the changes that will probably affect you.</p>
</div>
<div class="paragraph">
<p>Note that the configuration namespace has changed from <code>quarkus.keycloak</code> to <code>quarkus.oidc</code>.
The <code>realm</code> property has been removed and the Keycloak users are now required to configure
the <code>auth-base-url</code> as follows:</p>
</div>
<div class="listingblock">
<div class="content">
<pre class="highlightjs highlight"><code class="language-none hljs">quarkus.oidc.auth-base-url = http://myorg.keycloak.com/realms/{realm}</code></pre>
</div>
</div>
<div class="paragraph">
<p>where <code>{realm}</code> represents a Keycloak realm.</p>
</div>
<div class="paragraph">
<p><code>resource</code> has been renamed to <code>client-id</code>.
<code>realm-public-key</code> has been renamed to <code>public-key</code>.</p>
</div>
<div class="paragraph">
<p>Multi-tenancy support based on <code>KeycloakConfigResolver</code> is no longer supported with a Vert.x OAuth2 based alternative mechanism to be introduced in the next release.</p>
</div>
<div class="paragraph">
<p>Users needing to configure CORS should now use Quarkus CORS filter.</p>
</div>
<div class="paragraph">
<p>The team appreciates that some of the original <code>quarkus-keycloak</code> users may be affected by this change and would like to assure the community that <code>quarkus-oidc</code> will offer an equivalent but also significantly better overall OIDC experience very soon.</p>
</div>
<div class="paragraph">
<p>If some features are missing for your use case, <a href="https://github.com/quarkusio/quarkus/issues">please open GitHub issues</a>.</p>
</div>
</div>
<div class="sect2">
<h3 id="mongodb-with-panache"><a class="anchor" href="#mongodb-with-panache"></a>MongoDB with Panache</h3>
<div class="paragraph">
<p>You might already have used our Hibernate ORM with Panache layer. This simplified "Panache" approach will be generalized to other parts of the stack in the coming months.</p>
</div>
<div class="paragraph">
<p>And we already have a good news: we now have a MongoDB with Panache extension which heavily simplifies developing REST applications with MongoDB. You can find all the information in the <a href="https://quarkus.io/guides/mongodb-panache">MongoDB with Panache guide</a>, which comes with a quickstart.</p>
</div>
<div class="paragraph">
<p>As for every brand new feature, feedback is highly welcome.</p>
</div>
</div>
<div class="sect2">
<h3 id="jackson-and-json-b-customization"><a class="anchor" href="#jackson-and-json-b-customization"></a>Jackson and JSON-B customization</h3>
<div class="paragraph">
<p>It is now far easier to customize Jackson&#8217;s <code>ObjectMapper</code> or JSON-B configuration thanks to a new API we introduced in 0.24.</p>
</div>
<div class="paragraph">
<p>Everything is explained in detail in our <a href="https://quarkus.io/guides/rest-json#configuring-json-support">REST JSON guide</a>.</p>
</div>
</div>
<div class="sect2">
<h3 id="amazon-lambda"><a class="anchor" href="#amazon-lambda"></a>Amazon Lambda</h3>
<div class="paragraph">
<p>We now support named request handlers.</p>
</div>
</div>
<div class="sect2">
<h3 id="rest-assured-major-update"><a class="anchor" href="#rest-assured-major-update"></a>REST Assured major update</h3>
<div class="paragraph">
<p>We updated REST Assured to 4.1.1: there is a good chance you will have to adjust your tests.
Checkout the Rest Assured <a href="https://github.com/rest-assured/rest-assured/wiki/ReleaseNotes40">Release Notes</a> for details.</p>
</div>
</div>
<div class="sect2">
<h3 id="other-new-extensions"><a class="anchor" href="#other-new-extensions"></a>Other new extensions</h3>
<div class="sect3">
<h4 id="resteasy-jaxb"><a class="anchor" href="#resteasy-jaxb"></a>RESTEasy JAXB</h4>
<div class="paragraph">
<p>We now have a proper RESTEasy JAXB extension. So if you are using JAXB with your REST services, please use the <code>quarkus-resteasy-jaxb</code> extension from now on.</p>
</div>
</div>
<div class="sect3">
<h4 id="narayana-stm"><a class="anchor" href="#narayana-stm"></a>Narayana STM</h4>
<div class="paragraph">
<p>If you want to use Narayana STM (as in Software Transactional Memory), we now have an extension for it (and <a href="https://quarkus.io/guides/software-transactional-memory">a guide</a>!).</p>
</div>
<div class="paragraph">
<p>STM offers an approach to developing transactional applications in a highly concurrent environment with some of the same characteristics of ACID (Atomicity, Consistency, Isolation and Durability) transactions.</p>
</div>
</div>
</div>
<div class="sect2">
<h3 id="full-changelog"><a class="anchor" href="#full-changelog"></a>Full changelog</h3>
<div class="paragraph">
<p>We also fixed a few bugs and usability issues: get <a href="https://github.com/quarkusio/quarkus/releases/tag/0.24.0">the full changelog of 0.24.0 on GitHub</a>.</p>
</div>
</div>
</div>
</div>
<div class="sect1">
<h2 id="contributors"><a class="anchor" href="#contributors"></a>Contributors</h2>
<div class="sectionbody">
<div class="paragraph">
<p>Quarkus has now <a href="https://github.com/quarkusio/quarkus/graphs/contributors">159 contributors</a>.
Many many thanks to each and everyone of them.</p>
</div>
<div class="paragraph">
<p>In particular for this release, thanks to Adam Bien, Alessio Soldano, Alexey Loubyansky, Andrej Petras, Andrew Guibert, Arne Mejlholm, Bill Burke, Chamin Kahandawaarachchi, Clement Escoffier, Cristiano Nicolai, Daniel Petisme, David M. Lloyd, Dmitry Telegin, Dusan Odalovic, Emmanuel Bernard, George Gastaldi, Georgios Andrianakis, Guillaume Dufour, Guillaume Smet, Jacob Middag, Jaikiran Pai, Jan Martiska, Jason T. Greene, Ken Finnigan, Loïc Mathieu, Maciej Swiderski, Manyanda Chitimbo, Martin Kouba, Matej Novotny, Max Rydahl Andersen, Michael Musgrove, Paulo Lieuthier, Peter Palaga, Peter Sönder, Radim Vansa, Rostislav Svoboda, Sanne Grinovero, Sergey Beryozkin, Stephane Epardaud, Stuart Douglas, Stéphane Épardaud, Timothy Power and Yoann Rodière.</p>
</div>
</div>
</div>
<div class="sect1">
<h2 id="come-join-us"><a class="anchor" href="#come-join-us"></a>Come Join Us</h2>
<div class="sectionbody">
<div class="paragraph">
<p>We value your feedback a lot so please report bugs, ask for improvements&#8230;&#8203; Let&#8217;s build something great together!</p>
</div>
<div class="paragraph">
<p>If you are a Quarkus user or just curious, don&#8217;t be shy and join our welcoming community:</p>
</div>
<div class="ulist">
<ul>
<li>
<p>provide feedback on <a href="https://github.com/quarkusio/quarkus/issues">GitHub</a>;</p>
</li>
<li>
<p>craft some code and <a href="https://github.com/quarkusio/quarkus/pulls">push a PR</a>;</p>
</li>
<li>
<p>discuss with us on <a href="https://quarkusio.zulipchat.com/">Zulip</a> and on the <a href="https://groups.google.com/d/forum/quarkus-dev">mailing list</a>;</p>
</li>
<li>
<p>ask your questions on <a href="https://stackoverflow.com/questions/tagged/quarkus">Stack Overflow</a>.</p>
</li>
</ul>
</div>
</div>
</div>
              
          </div>
          <div class="width-12-12"><div class="share-page">
  <a class="share-linkedin" href="https://www.linkedin.com/shareArticle?mini=true&url=https://quarkus.io/blog/quarkus-0-24.0-released/&title=Quarkus 0.24.0 released - Vert.x everywhere" rel="nofollow" target="_blank" title="Share on LinkedIn">
    <img src="/assets/images/share-page/icons_social-linkedin.png"/>
  </a>
  <a class="share-twitter" href="https://twitter.com/intent/tweet?text=Quarkus 0.24.0 released - Vert.x everywhere&url=https://quarkus.io/blog/quarkus-0-24.0-released/&via=quarkusio&related=quarkusio" rel="nofollow" target="_blank" title="Share on Twitter">
    <img src="/assets/images/share-page/icons_social-twitter.png"/>
  </a>
  <a class="share-facebook" href="https://facebook.com/sharer.php?u=https://quarkus.io/blog/quarkus-0-24.0-released/" rel="nofollow" target="_blank" title="Share on Facebook">
    <img src="/assets/images/share-page/icons_social-facebook.png"/>
  </a>
  <a class="share-reddit" href="http://www.reddit.com/submit?url=https://quarkus.io/blog/quarkus-0-24.0-released/" onclick="window.open(this.href, 'pop-up', 'left=20,top=20,width=900,height=500,toolbar=1,resizable=0'); return false;" title="Share on Reddit" >
    <img src="/assets/images/share-page/icons_social-reddit.png"/>
  </a>
  <a class="share-email" href="mailto:?subject=Quarkus 0.24.0 released - Vert.x everywhere&amp;body=Quarkus 0.24.0 released - Vert.x everywhere https://quarkus.io/blog/quarkus-0-24.0-released/" title="Share via Email" >
    <img src="/assets/images/share-page/icons_social-email.png"/>
  </a>
</div>
</div>
        </div>
      </div>
    </div>
  </div>
</div>

  </div>

  <div class="content project-footer">
  <div class="footer-section">
    <div class="logo-wrapper">
      <a href="/"><img src="/assets/images/quarkus_logo_horizontal_rgb_reverse.svg" class="project-logo" title="Quarkus"></a>
    </div>
  </div>
  <div class="grid-wrapper">
    <p class="grid__item width-3-12">Quarkus is open. All dependencies of this project are available under the <a href='https://www.apache.org/licenses/LICENSE-2.0' target='_blank'>Apache Software License 2.0</a> or compatible license.<br /><br />This website was built with <a href='https://jekyllrb.com/' target='_blank'>Jekyll</a>, is hosted on <a href='https://pages.github.com/' target='_blank'>Github Pages</a> and is completely open source. If you want to make it better, <a href='https://github.com/quarkusio/quarkusio.github.io' target='_blank'>fork the website</a> and show us what you’ve got.</p>

    
      <div class="width-1-12 project-links">
        <span>Navigation</span>
        <ul class="footer-links width-1-12">
          
            <li><a href="/">Home</a></li>
          
            <li><a href="/guides">Guides</a></li>
          
            <li><a href="/community/#contributing">Contribute</a></li>
          
            <li><a href="/faq">FAQ</a></li>
          
            <li><a href="/get-started">Get Started</a></li>
          
        </ul>
      </div>
    
      <div class="width-1-12 project-links">
        <span>Contribute</span>
        <ul class="footer-links width-1-12">
          
            <li><a href="https://twitter.com/quarkusio">Follow us</a></li>
          
            <li><a href="https://github.com/quarkusio">GitHub</a></li>
          
            <li><a href="/security">Security&nbsp;policy</a></li>
          
        </ul>
      </div>
    
      <div class="width-1-12 project-links">
        <span>Get Help</span>
        <ul class="footer-links width-1-12">
          
            <li><a href="https://groups.google.com/forum/#!forum/quarkus-dev">Forums</a></li>
          
            <li><a href="https://quarkusio.zulipchat.com">Chatroom</a></li>
          
        </ul>
      </div>
    

    
      <div class="width-3-12 more-links">
        <span>Quarkus is made of community projects</span>
        <ul class="footer-links">
          
            <li><a href="https://vertx.io/" target="_blank">Eclipse Vert.x</a></li>
          
            <li><a href="https://microprofile.io" target="_blank">Eclipse MicroProfile</a></li>
          
            <li><a href="https://hibernate.org" target="_blank">Hibernate</a></li>
          
            <li><a href="https://netty.io" target="_blank">Netty</a></li>
          
            <li><a href="https://resteasy.github.io" target="_blank">RESTEasy</a></li>
          
            <li><a href="https://camel.apache.org" target="_blank">Apache Camel</a></li>
          
            <li><a href="https://code.quarkus.io/" target="_blank">And many more...</a></li>
          
        </ul>
      </div>
    
  </div>
</div>
  <div class="content redhat-footer">
  <div class="grid-wrapper">
    <span class="licence">
      <i class="fab fa-creative-commons"></i><i class="fab fa-creative-commons-by"></i> <a href="https://creativecommons.org/licenses/by/3.0/" target="_blank">CC by 3.0</a> | <a href="https://www.redhat.com/en/about/privacy-policy">Privacy Policy</a>
    </span>
    <span class="redhat">
      Sponsored by
    </span>
    <span class="redhat-logo">
      <a href="https://www.redhat.com/" target="_blank"><img src="/assets/images/redhat_reversed.svg"></a>
    </span>
  </div>
</div>


  <script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.4/jquery.min.js" integrity="sha384-8gBf6Y4YYq7Jx97PIqmTwLPin4hxIzQw5aDmUg/DDhul9fFpbbLcLh3nTIIDJKhx" crossorigin="anonymous"></script>
  <script type="text/javascript" src="/assets/javascript/mobile-nav.js"></script>
  <script type="text/javascript" src="/assets/javascript/scroll-down.js"></script>
  <script src="/assets/javascript/satellite.js" type="text/javascript"></script>
  <script src="https://quarkus.io/guides/javascript/config.js" type="text/javascript"></script>
  <script src="/assets/javascript/search-filter.js" type="text/javascript"></script>
  <script src="/assets/javascript/back-to-top.js" type="text/javascript"></script>
</body>

</html>
